﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data.SqlClient;

namespace LI4.Data
{
    class Anuncio
    {
        private Ligacao ligacao;

        public Anuncio()
        {
            ligacao = new Ligacao();
        }

        public int inserir(Business.Anuncio anuncio)
        {
            int success;
            try
            {
                ligacao.Update("INSERT [dbo].[Anuncios] ( [cod_area], [username], [descricao], [rua], [cod_postal], [cod_localidade], [latitude], [longitude]) VALUES ('" + anuncio.Area.Cod_Area + "','" + anuncio.Username + "','" + anuncio.Descricao + "','" + anuncio.Rua + "','" + anuncio.CodPostal + "','" + anuncio.Localidade.CodLocalidade + "','" + anuncio.Latitude + "','" + anuncio.Longitude + "')");
                success = Ligacao.OK;
            }
            catch
            {
                success =  Ligacao.DBERROR;
            }
            return success;
        }

        public int update(Business.Anuncio anuncio)
        {
            int success;
            try
            {
                ligacao.Update("UPDATE [dbo].[Anuncios] set cod_area='" + anuncio.Area.Cod_Area + "',username='" + anuncio.Username + "',descricao='" + anuncio.Descricao + "',rua='" + anuncio.Rua + "',cod_postal='" + anuncio.CodPostal + "',cod_localidade='" + anuncio.Localidade.CodLocalidade + "',latitude='" + anuncio.Latitude + "',longitude='" + anuncio.Longitude + "' where username='" + anuncio.Username + "'");
                success = Ligacao.OK;
            }
            catch
            {
                success = Ligacao.DBERROR;
            }
            return success;

        }
        public int remover(Business.Anuncio anuncio)
        {
            try
            {
                ligacao.Update("DELETE [dbo].[anuncios] where cod_anuncio='" + anuncio.CodAnuncio + "'");
                
                return Ligacao.OK;
            }
            catch
            {
                return Ligacao.DBERROR;
            }
        }

        public ArrayList getAnuncios(string username)
        {
            ArrayList array = new ArrayList();
            SqlDataReader reader;

            ligacao.Select("SELECT Anuncios.cod_anuncio,Anuncios.cod_area,Anuncios.username,Anuncios.descricao,Anuncios.rua,Anuncios.cod_postal,Anuncios.cod_localidade,Anuncios.latitude,Anuncios.longitude, Area.nome, Localidades.nome as nome_localidade,Localidades.cod_distrito,Distritos.nome as nome_dist FROM Anuncios,Area,Localidades,Distritos where username='" + username + "' and Area.cod_area=Anuncios.cod_area and Anuncios.cod_localidade=Localidades.cod_localidade and Distritos.cod_distrito=Localidades.cod_distrito");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {
                Business.Distrito dist = new LI4.Business.Distrito((int)reader["cod_distrito"], reader["nome_dist"].ToString());
                Business.Localidade local = new LI4.Business.Localidade((int)reader["cod_localidade"], dist, reader["nome_localidade"].ToString());
                Business.Area area = new Business.Area((int)reader["cod_area"], reader["nome"].ToString());

                array.Add(new Business.Anuncio((int)reader["cod_anuncio"], area, reader["username"].ToString(), reader["descricao"].ToString(), reader["rua"].ToString(), local, reader["cod_postal"].ToString(), reader["latitude"].ToString(), reader["longitude"].ToString()));
            }
            reader.Close();
            return array;
        }

        public Business.Anuncio getAnuncio(int codigo)
        {
            Business.Anuncio anuncio;
            SqlDataReader reader;

            ligacao.Select("SELECT Anuncios.cod_anuncio,Anuncios.cod_area,Anuncios.username,Anuncios.descricao,Anuncios.rua,Anuncios.cod_postal,Anuncios.cod_localidade,Anuncios.latitude,Anuncios.longitude, Area.nome, Localidades.nome as nome_localidade,Localidades.cod_distrito,Distritos.nome as nome_dist FROM Anuncios,Area,Localidades,Distritos where cod_anuncio='" + codigo + "' and Area.cod_area=Anuncios.cod_area and Anuncios.cod_localidade=Localidades.cod_localidade and Distritos.cod_distrito=Localidades.cod_distrito");
            reader = ligacao.mySqlDataReader;

            reader.Read();
            
            Business.Distrito dist = new LI4.Business.Distrito((int)reader["cod_distrito"], reader["nome_dist"].ToString());
            Business.Localidade local = new LI4.Business.Localidade((int)reader["cod_localidade"], dist, reader["nome_localidade"].ToString());
            Business.Area area = new Business.Area((int)reader["cod_area"], reader["nome"].ToString());

            anuncio = new Business.Anuncio((int)reader["cod_anuncio"], area, reader["username"].ToString(), reader["descricao"].ToString(), reader["rua"].ToString(), local, reader["cod_postal"].ToString(), reader["latitude"].ToString(), reader["longitude"].ToString());
            
            reader.Close();
            return anuncio;
        }
    }
}
